from django_redis import get_redis_connection
from rest_framework import serializers

class RegisterSmsCodeSerializer(serializers.Serializer):

    #用户输入的图形验证码
    text=serializers.CharField(max_length=4,min_length=4,required=True,label='用户输入的图形验证码')
    #uuid
    image_code_id=serializers.UUIDField(required=True,label='uuid')
    """
    序列化器的验证分为４种方式：
        １、类型验证
        ２、选项
        ３、单个字段
        ４、多个字段

    """
    def validate(self, attrs):

        #1、获取用户输入的
        text = attrs.get('text')
        image_code_id = attrs.get('image_code_id')
        #2、获取redis的
        redis_conn = get_redis_connection('code')

        redis_text = redis_conn.get('img_%s'%image_code_id)
        #redis的数据是由时效的
        if redis_text is None:
            raise serializers.ValidationError('图片验证码已过期')
        #3、比对
        #redis的数据是bytes类型
        #用户在输入验证码的时候不会在意大小写
        if redis_text.decode().lower() != text.lower():
            raise serializers.ValidationError('输入不一致')

        return attrs
























